#pragma once

#define KEYBD_EVENT_DOWN   0
#define KEYBD_EVENT_UP     1
#define MOUSE_EVENT_LBDOWN 0
#define MOUSE_EVENT_LBUP   1
#define MOUSE_EVENT_MOVE   2

typedef void (*KEYBDPROC)(int event, int key);
typedef void (*MOUSEPROC)(int event, int x, int y);

/*******************************************************************************
* 启动LCD服务器
* width:    设置LCD的宽度
* height:   设置LCD的高度
* bpp:      指定LCD颜色深度(8,16,24,32)
* scale:    指定LCD像素缩放级别(整数倍放大)
*******************************************************************************/
int VirtLCD_Init(int width, int height, int bpp, int scale);

/*******************************************************************************
* 关闭LCD服务器，将会关闭服务器进程
* 注意：
* 关闭后帧缓存不可再进行读写操作
*******************************************************************************/
void VirtLCD_Exit(void);

/*******************************************************************************
* 设置按键回调函数
* event=0,按键按下;event=1,按键弹起
* key为虚拟键码
*******************************************************************************/
void VirtLCD_SetKeybdProc(KEYBDPROC func);

/*******************************************************************************
* 设置鼠标回调函数
* event=0,左键按下;event=1,左键弹起;event=2,鼠标移动
* x,y为当前鼠标坐标
*******************************************************************************/
void VirtLCD_SetMouseProc(MOUSEPROC func);

/*******************************************************************************
* 获取LCD帧缓存指针
* 注意:
* 1.帧缓存指针不能越界访问，有效长度 = width * height * bpp / 8
* 2.屏幕右上角第一个点为原点，内存增长方向为：从左到右，从上到下
*******************************************************************************/
void* VirtLCD_GetFrameBuffer(void);
